package com.meatball.dji.common.mqtt

import org.eclipse.paho.client.mqttv3.MqttMessage
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/mqtt")
class MqttController(private val mqttClient: IMqttClient) {
    // 表示一个订阅主题（Subscription Topic）。这里的#是一个通配符，代表匹配testtopic/下的所有子主题。
    // 这意味着如果有客户端向testtopic/1、testtopic/2、testtopic/anything等任何以testtopic/开头的主题发布消息，
    // 订阅了testtopic/#的客户端都会接收到这些消息。
    var subTopic: String = "testtopic/#"
    // 表示一个发布主题（Publish Topic）。这是一个具体的主题地址，客户端向这个主题发布消息时，
    // 只有订阅了testtopic/1或使用了通配符可以匹配到这个主题的客户端才能收到消息。
    var pubTopic: String = "testtopic/1"
    @PostMapping("/test")
    fun test() {
        val client = mqttClient.getClient()
        // 订阅
        client.subscribe(subTopic)

        val a = """
            {
                "method": "config"
                "data": "你好啊"
            }
        """.trimIndent()
        // 发送消息
        val message = MqttMessage(a.toByteArray())
        message.qos = 2
        client.publish(pubTopic, message)
        println("消息发送成功。")

//        client.disconnect()
//        client.close()
    }
}